The present invention relates to communications in general and, in particular, to flow congestion management.
In a typical router interface architecture, packets are received and placed in queues. Queue selection is often done based on packet type (e.g., by inspecting a DiffServ Code Point or Layer 2 Priority field, or transport protocol port numbers). In many implementations, there is one queue per service type (voice, video, preferred data, best effort data, etc.). Various packet scheduler types (e.g., self-clocked fair queueing (SCFQ), weighted round-robin (WRR), weighted fair queueing (WFQ), or strict priority scheduling (SPS)) may be used to schedule packets from queues and provide quality of service to different queues. Packets for specific queues may be discarded if rate exceeds configured limit for the queues.
Congestion can occur because of too many active flows or because of a reduction in system capacity (such as in wireless and satellite systems using adaptive coding and modulation (ACM)). Typically, congestion management is done by managing queues (e.g., tail-drop—discard packet if queue is full; random early discard (RED)—randomly discard packet if queue is close to full). These techniques may be adequate for many data applications, but less so for flow-based applications such as voice and video. By way of example, when there are different flows (e.g., voice calls) that share the queue, and total voice traffic exceeds queue capacity, then discarding packets across all flows may not be a good policy.